<?php
class Unicode{
	static function convert_unicode_case($test){
		$uppercase_utf8=array("A","Á","À","Ả","Ã","Ạ","Â","Ấ","Ầ","Ẩ","Ẫ","Ậ","Ă","Ắ","Ằ","Ẳ","Ẵ","Ặ","E","É","È","Ẻ","Ẽ","Ẹ","Ê","Ế","Ề","Ể","Ễ","Ệ","I","Í","Ì","Ỉ","Ĩ","Ị","O","Ó","Ò","Ỏ","Õ","Ọ","Ô","Ố","Ồ","Ổ","Ỗ","Ộ","Ơ","Ớ","Ờ","Ở","Ỡ","Ợ","U","Ú","Ù","Ủ","Ũ","Ụ","Ư","Ứ","Ừ","Ử","Ữ","Ự","Y","Ý","Ỳ","Ỷ","Ỹ","Ỵ","Đ","Đ"," ", "~", "!", "@", "#", "$", "%", "^", "&", "*", "(", ")", "-", "_", "+", "=", "|", "\\", "{", "}",":", ";", "<", ">", "/", "?");
		$lowercase_utf8=array("a","á","à","ả","ã","ạ","â","ấ","ầ","ẩ","ẫ","ậ","ă","ắ","ằ","ẳ","ẵ","ặ","e","é","è","ẻ","ẽ","ẹ","ê","ế","ề","ể","ễ","ệ","i","í","ì","ỉ","ĩ","ị","o","ó","ò","ỏ","õ","ọ","ô","ố","ồ","ổ","ỗ","ộ","ơ","ớ","ờ","ở","ỡ","ợ","u","ú","ù","ủ","ũ","ụ","ư","ứ","ừ","ử","ữ","ự","y","ý","ỳ","ỷ","ỹ","ỵ","đ","đ","", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "","", "", "", "", "", "", "", "", "");
		if(!$test){
			return $test;
		} else {
			$new_test=str_replace($uppercase_utf8,$lowercase_utf8,$test);
			return $new_test;
		}
	}

	/*-------------------------------------------------------------------------*/
	// Characters encoding converter by @NKT
	/*-------------------------------------------------------------------------*/
	static function convert_encoding($from_encoding, $to_encoding, $text){
		$chracters_map['utf8'] = array("A","Á","À","Ả","Ã","Ạ","Â","Ấ","Ầ","Ẩ","Ẫ","Ậ","Ă","Ắ","Ằ","Ẳ","Ẵ","Ặ","E","É","È","Ẻ","Ẽ","Ẹ","Ê","Ế","Ề","Ể","Ễ","Ệ","I","Í","Ì","Ỉ","Ĩ","Ị","O","Ó","Ò","Ỏ","Õ","Ọ","Ô","Ố","Ồ","Ổ","Ỗ","Ộ","Ơ","Ớ","Ờ","Ở","Ỡ","Ợ","U","Ú","Ù","Ủ","Ũ","Ụ","Ư","Ứ","Ừ","Ử","Ữ","Ự","Y","Ý","Ỳ","Ỷ","Ỹ","Ỵ","Đ",

									"a","á","à","ả","ã","ạ","â","ấ","ầ","ẩ","ẫ","ậ","ă","ắ","ằ","ẳ","ẵ","ặ","e","é","è","ẻ","ẽ","ẹ","ê","ế","ề","ể","ễ","ệ","i","í","ì","ỉ","ĩ","ị","o","ó","ò","ỏ","õ","ọ","ô","ố","ồ","ổ","ỗ","ộ","ơ","ớ","ờ","ở","ỡ","ợ","u","ú","ù","ủ","ũ","ụ","ư","ứ","ừ","ử","ữ","ự","y","ý","ỳ","ỷ","ỹ","ỵ","đ");

		$chracters_map['none'] = array("A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","E","E","E","E","E","E","E","E","E","E","E","E","I","I","I","I","I","I","O","O","O","O","O","O","O","O","O","O","O","O","O","O","O","O","O","O","U","U","U","U","U","U","U","U","U","U","U","U","Y","Y","Y","Y","Y","Y","D",

									"a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","e","e","e","e","e","e","e","e","e","e","e","e","i","i","i","i","i","i","o","o","o","o","o","o","o","o","o","o","o","o","o","o","o","o","o","o","u","u","u","u","u","u","u","u","u","u","u","u","y","y","y","y","y","y","d");
	
		if(isset($chracters_map[$from_encoding]) AND isset($chracters_map[$to_encoding])){
			$new_string = str_replace($chracters_map[$from_encoding], $chracters_map[$to_encoding], $text);
			return $new_string;
		}
	}

	static function seems_utf8($Str) { # by bmorel at ssi dot fr
		for ($i=0; $i<strlen($Str); $i++) {
			if (ord($Str[$i]) < 0x80) continue; # 0bbbbbbb
			elseif ((ord($Str[$i]) & 0xE0) == 0xC0) $n=1; # 110bbbbb
			elseif ((ord($Str[$i]) & 0xF0) == 0xE0) $n=2; # 1110bbbb
			elseif ((ord($Str[$i]) & 0xF8) == 0xF0) $n=3; # 11110bbb
			elseif ((ord($Str[$i]) & 0xFC) == 0xF8) $n=4; # 111110bb
			elseif ((ord($Str[$i]) & 0xFE) == 0xFC) $n=5; # 1111110b
			else return false; # Does not match any model
			for ($j=0; $j<$n; $j++) { # n bytes matching 10bbbbbb follow ?
				if ((++$i == strlen($Str)) || ((ord($Str[$i]) & 0xC0) != 0x80))
				return false;
			}
		}
		return true;
	}


	static function utf8_uri_encode( $utf8_string ) {
		$unicode = '';        
		$values = array();
		$num_octets = 1;
			
		for ($i = 0; $i < strlen( $utf8_string ); $i++ ) {

			$value = ord( $utf8_string[ $i ] );
					
			if ( $value < 128 ) {
				$unicode .= chr($value);
			} 
			else {
				if( count( $values ) == 0 ) $num_octets = ( $value < 224 ) ? 2 : 3;
				
				$values[] = $value;
			
				if ( count( $values ) == $num_octets ) {
					if ($num_octets == 3) {
						$unicode .= '%' . dechex($values[0]) . '%' . dechex($values[1]) . '%' . dechex($values[2]);
					} 
					else {
						$unicode .= '%' . dechex($values[0]) . '%' . dechex($values[1]);
					}
					
					$values = array();
					$num_octets = 1;
				}
			}
		}

	 	return $unicode;    
	}
	
    static function convertUnicodeCase($test) {
        $uppercase_utf8 = array("A", "Á", "À", "Ả", "Ã", "Ạ", "Â", "Ấ", "Ầ", "Ẩ", "Ẫ", "Ậ", "Ă", "Ắ", "Ằ", "Ẳ", "Ẵ", "Ặ", "E", "É", "È", "Ẻ", "Ẽ", "Ẹ", "Ê", "Ế", "Ề", "Ể", "Ễ", "Ệ", "I", "Í", "Ì", "Ỉ", "Ĩ", "Ị", "O", "Ó", "Ò", "Ỏ", "Õ", "Ọ", "Ô", "Ố", "Ồ", "Ổ", "Ỗ", "Ộ", "Ơ", "Ớ", "Ờ", "Ở", "Ỡ", "Ợ", "U", "Ú", "Ù", "Ủ", "Ũ", "Ụ", "Ư", "Ứ", "Ừ", "Ử", "Ữ", "Ự", "Y", "Ý", "Ỳ", "Ỷ", "Ỹ", "Ỵ", "Đ", " ", "~", "!", "@", "#", "$", "%", "^", "&", "*", "(", ")", "-", "_", "+", "=", "|", "\\", "{", "}", ":", ";", "<", ">", "/", "?");
        $lowercase_utf8 = array("a", "á", "à", "ả", "ã", "ạ", "â", "ấ", "ầ", "ẩ", "ẫ", "ậ", "ă", "ắ", "ằ", "ẳ", "ẵ", "ặ", "e", "é", "è", "ẻ", "ẽ", "ẹ", "ê", "ế", "ề", "ể", "ễ", "ệ", "i", "í", "ì", "ỉ", "ĩ", "ị", "o", "ó", "ò", "ỏ", "õ", "ọ", "ô", "ố", "ồ", "ổ", "ỗ", "ộ", "ơ", "ớ", "ờ", "ở", "ỡ", "ợ", "u", "ú", "ù", "ủ", "ũ", "ụ", "ư", "ứ", "ừ", "ử", "ữ", "ự", "y", "ý", "ỳ", "ỷ", "ỹ", "ỵ", "đ", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "");
        if (!$test) {
            return $test;
        } else {
            $new_test = str_replace($uppercase_utf8, $lowercase_utf8, $test);
            return $new_test;
        }
    }
    
    
    static function convertUnicodeCaseWithoutHtml($test) {
        $uppercase_utf8 = array("A", "Á", "À", "Ả", "Ã", "Ạ", "Â", "Ấ", "Ầ", "Ẩ", "Ẫ", "Ậ", "Ă", "Ắ", "Ằ", "Ẳ", "Ẵ", "Ặ", "E", "É", "È", "Ẻ", "Ẽ", "Ẹ", "Ê", "Ế", "Ề", "Ể", "Ễ", "Ệ", "I", "Í", "Ì", "Ỉ", "Ĩ", "Ị", "O", "Ó", "Ò", "Ỏ", "Õ", "Ọ", "Ô", "Ố", "Ồ", "Ổ", "Ỗ", "Ộ", "Ơ", "Ớ", "Ờ", "Ở", "Ỡ", "Ợ", "U", "Ú", "Ù", "Ủ", "Ũ", "Ụ", "Ư", "Ứ", "Ừ", "Ử", "Ữ", "Ự", "Y", "Ý", "Ỳ", "Ỷ", "Ỹ", "Ỵ", "Đ", "Q", "W", "R", "T", "U", "S", "D", "F", "G", "H", "J", "K", "L", "Z", "X", "C", "V", "B", "N", "M", "P");
        $lowercase_utf8 = array("a", "á", "à", "ả", "ã", "ạ", "â", "ấ", "ầ", "ẩ", "ẫ", "ậ", "ă", "ắ", "ằ", "ẳ", "ẵ", "ặ", "e", "é", "è", "ẻ", "ẽ", "ẹ", "ê", "ế", "ề", "ể", "ễ", "ệ", "i", "í", "ì", "ỉ", "ĩ", "ị", "o", "ó", "ò", "ỏ", "õ", "ọ", "ô", "ố", "ồ", "ổ", "ỗ", "ộ", "ơ", "ớ", "ờ", "ở", "ỡ", "ợ", "u", "ú", "ù", "ủ", "ũ", "ụ", "ư", "ứ", "ừ", "ử", "ữ", "ự", "y", "ý", "ỳ", "ỷ", "ỹ", "ỵ", "đ", "q", "w", "r", "t", "p", "s", "d", "f", "g", "h", "j", "k", "l", "z", "x", "c", "v", "b", "n", "m", "p");
        if (!$test) {
            return $test;
        } else {
            $new_test = str_replace($uppercase_utf8, $lowercase_utf8, $test);
            return $new_test;
        }
    }
    
    static function stripUnicode($str) {
        if (!$str)
            return false;
        $marTViet = array("à", "á", "ạ", "ả", "ã", "â", "ầ", "ấ", "ậ", "ẩ", "ẫ", "ă",
            "ằ", "ắ", "ặ", "ẳ", "ẵ", "è", "é", "ẹ", "ẻ", "ẽ", "ê", "ề"
            , "ế", "ệ", "ể", "ễ",
            "ì", "í", "ị", "ỉ", "ĩ",
            "ò", "ó", "ọ", "ỏ", "õ", "ô", "ồ", "ố", "ộ", "ổ", "ỗ", "ơ"
            , "ờ", "ớ", "ợ", "ở", "ỡ",
            "ù", "ú", "ụ", "ủ", "ũ", "ư", "ừ", "ứ", "ự", "ử", "ữ",
            "ỳ", "ý", "ỵ", "ỷ", "ỹ",
            "đ",
            "À", "Á", "Ạ", "Ả", "Ã", "Â", "Ầ", "Ấ", "Ậ", "Ẩ", "Ẫ", "Ă"
            , "Ằ", "Ắ", "Ặ", "Ẳ", "Ẵ",
            "È", "É", "Ẹ", "Ẻ", "Ẽ", "Ê", "Ề", "Ế", "Ệ", "Ể", "Ễ",
            "Ì", "Í", "Ị", "Ỉ", "Ĩ",
            "Ò", "Ó", "Ọ", "Ỏ", "Õ", "Ô", "Ồ", "Ố", "Ộ", "Ổ", "Ỗ", "Ơ"
            , "Ờ", "Ớ", "Ợ", "Ở", "Ỡ",
            "Ù", "Ú", "Ụ", "Ủ", "Ũ", "Ư", "Ừ", "Ứ", "Ự", "Ử", "Ữ",
            "Ỳ", "Ý", "Ỵ", "Ỷ", "Ỹ",
            "Đ");

        $marKoDau = array("a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a"
            , "a", "a", "a", "a", "a", "a",
            "e", "e", "e", "e", "e", "e", "e", "e", "e", "e", "e",
            "i", "i", "i", "i", "i",
            "o", "o", "o", "o", "o", "o", "o", "o", "o", "o", "o", "o"
            , "o", "o", "o", "o", "o",
            "u", "u", "u", "u", "u", "u", "u", "u", "u", "u", "u",
            "y", "y", "y", "y", "y",
            "d",
            "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A"
            , "A", "A", "A", "A", "A",
            "E", "E", "E", "E", "E", "E", "E", "E", "E", "E", "E",
            "I", "I", "I", "I", "I",
            "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O"
            , "O", "O", "O", "O", "O",
            "U", "U", "U", "U", "U", "U", "U", "U", "U", "U", "U",
            "Y", "Y", "Y", "Y", "Y",
            "D");

        $str = str_replace($marTViet, $marKoDau, $str);
        return $str;
    }
    
    //TuấnNK add ( 2008/05/23 12h17 ) hàm đếm ký tự viết hoa
    static function countUpChars($str) {
        if ($str != '') {
            $strNotAllow = "A B C D E F G H I J K L M N O P Q R S T U V W X Y Z Á À Ã Ạ Â Ấ Ầ Ẫ Ậ Ă Ắ Ằ Ẵ Ặ É È Ẽ Ẹ Ê Ế Ề Ễ Ệ Í Ì Ĩ Ị Ó Ò Õ Ọ Ô Ố Ồ Ỗ Ộ Ơ Ớ Ờ Ỡ Ợ Ú Ù Ũ Ụ Ư Ứ Ừ Ữ Ự Ý Ỳ Ỹ Ỵ";
            $checkArray = (explode(' ', $strNotAllow));
            $intCount = 0;

            foreach ($checkArray as $checkChar) {
                $intCount+=substr_count($str, $checkChar);
            }
            return ($intCount <= floor(strlen($str) / 3));
        }
        return true;
    }
    
    //Chuyển chữ hoa có dấu thành chữ thường có dấu
	static function convert_unicode_to_lowercase($test){
		$uppercase_utf8=array("A","Á","À","Ả","Ã","Ạ","Â","Ấ","Ầ","Ẩ","Ẫ","Ậ","Ă","Ắ","Ằ","Ẳ","Ẵ","Ặ","E","É","È","Ẻ","Ẽ","Ẹ","Ê","Ế","Ề","Ể","Ễ","Ệ","I","Í","Ì","Ỉ","Ĩ","Ị","O","Ó","Ò","Ỏ","Õ","Ọ","Ô","Ố","Ồ","Ổ","Ỗ","Ộ","Ơ","Ớ","Ờ","Ở","Ỡ","Ợ","U","Ú","Ù","Ủ","Ũ","Ụ","Ư","Ứ","Ừ","Ử","Ữ","Ự","Y","Ý","Ỳ","Ỷ","Ỹ","Ỵ","Đ","B","C","D","F","G","H","J","K","L","M","N","P","Q","R","S","T","V","W","X","Z", "~", "!", "@", "#", "$", "%", "^", "&", "*", "(", ")", "-", "_", "+", "=", "|", "\\", "{", "}",":", ";", "<", ">", "/", "?");
		$lowercase_utf8=array("a","á","à","ả","ã","ạ","â","ấ","ầ","ẩ","ẫ","ậ","ă","ắ","ằ","ẳ","ẵ","ặ","e","é","è","ẻ","ẽ","ẹ","ê","ế","ề","ể","ễ","ệ","i","í","ì","ỉ","ĩ","ị","o","ó","ò","ỏ","õ","ọ","ô","ố","ồ","ổ","ỗ","ộ","ơ","ớ","ờ","ở","ỡ","ợ","u","ú","ù","ủ","ũ","ụ","ư","ứ","ừ","ử","ữ","ự","y","ý","ỳ","ỷ","ỹ","ỵ","đ","b","c","d","f","g","h","j","k","l","m","n","p","q","r","s","t","v","w","x","z", "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" );
		if(!$test){
			return $test;
		} else {
			$new_test=str_replace($uppercase_utf8,$lowercase_utf8,$test);
			return $new_test;
		}
	}
	static function delVNese($txt, $flag=null) {
		$pattern = "Ă Â Á À Ả Ã Ạ Ắ Ằ Ẳ Ẵ Ặ Ấ Ầ Ẩ Ẫ Ậ";	   		
		$ar = split(' ', $pattern);for($i=0; $i<sizeof($ar); $i++){$txt = str_replace($ar[$i], "A", $txt);}		
		$pattern = "ă â á à ả ã ạ ắ ằ ẳ ẵ ặ ấ ầ ẩ ẫ ậ";	   
		$ar = split(' ', $pattern);for($i=0; $i<sizeof($ar); $i++){$txt = str_replace($ar[$i], "a", $txt);}		
		$pattern = "Ê É È Ẻ Ẽ Ẹ Ế Ề Ể Ễ Ệ";	   
		$ar = split(' ', $pattern);for($i=0; $i<sizeof($ar); $i++){$txt = str_replace($ar[$i], "E", $txt);}		
		$pattern = "ê é è ẻ ẽ ẹ ế ề ể ễ ệ";	   
		$ar = split(' ', $pattern);for($i=0; $i<sizeof($ar); $i++){$txt = str_replace($ar[$i], "e", $txt);}		
		$pattern = "Ô Ơ Ó Ò Ỏ Õ Ọ Ố Ồ Ổ Ỗ Ộ Ớ Ờ Ở Ỡ Ợ";	   
		$ar = split(' ', $pattern);for($i=0; $i<sizeof($ar); $i++){$txt = str_replace($ar[$i], "O", $txt);}		
		$pattern = "ô ơ ó ò ỏ õ ọ ố ồ ổ ỗ ộ ớ ờ ở ỡ ợ";	   
		$ar = split(' ', $pattern);for($i=0; $i<sizeof($ar); $i++){$txt = str_replace($ar[$i], "o", $txt);}		
		$pattern = "Ư Ú Ù Ủ Ũ Ụ Ứ Ừ Ử Ữ Ự";	   
		$ar = split(' ', $pattern);for($i=0; $i<sizeof($ar); $i++){$txt = str_replace($ar[$i], "U", $txt);}		
		$pattern = "ư ú ù ủ ũ ụ ứ ừ ử ữ ự";	   
		$ar = split(' ', $pattern);for($i=0; $i<sizeof($ar); $i++){$txt = str_replace($ar[$i], "u", $txt);}		
		$pattern = "Í Ì Ỉ Ĩ Ị";	   
		$ar = split(' ', $pattern);for($i=0; $i<sizeof($ar); $i++){$txt = str_replace($ar[$i], "I", $txt);}		
		$pattern = "í ì ỉ ĩ ị";	   
		$ar = split(' ', $pattern);for($i=0; $i<sizeof($ar); $i++){$txt = str_replace($ar[$i], "i", $txt);}		
		$pattern = "Ý Ỳ Ỷ Ỹ Ỵ";	   
		$ar = split(' ', $pattern);for($i=0; $i<sizeof($ar); $i++){$txt = str_replace($ar[$i], "Y", $txt);}		
		$pattern = "ý ỳ ỷ ỹ ỵ";	   
		$ar = split(' ', $pattern);for($i=0; $i<sizeof($ar); $i++){$txt = str_replace($ar[$i], "y", $txt);}		
		$pattern = "Đ";	   
		$ar = split(' ', $pattern);for($i=0; $i<sizeof($ar); $i++){$txt = str_replace($ar[$i], "D", $txt);}		
		$pattern = "đ";	   
		$ar = split(' ', $pattern);for($i=0; $i<sizeof($ar); $i++){$txt = str_replace($ar[$i], "d", $txt);}		
		$pattern = "” @ # $ % ^ & * ! + = / : ; - @ \ ? . , ' [ ] | ^ ` { } - _ ~ ( ) < > \" ‘ ’";
		$ar = split(' ', $pattern);for($i=0; $i<sizeof($ar); $i++){$txt = str_replace($ar[$i], " ", $txt);}
		
		/*if ($flag)
			$txt = strtolower(preg_replace("/\s+/", "-", trim($txt)));
		else
			$txt = strtolower(preg_replace("/\s+/", "-", trim($txt)));*/
	
		return $txt;
	}
}
?>